﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;

namespace ProjecteBiblioteca
{
    class ConnexioBD
    {
        /// <summary>
        /// Obtenir cadena de connexió de la BD alumnes (MARC).
        /// </summary>
        /// <returns></returns>
        public static SqlConnection obtenirConnexioBiblioteca()
        {
            string cadConnexio =
                ConfigurationManager.ConnectionStrings["ProjecteBiblioteca.Properties.Settings.BibliotecaConnectionStringMarc"].ConnectionString;
            System.Data.SqlClient.SqlConnection con = new SqlConnection(cadConnexio);
            return con;
        }

        /// <summary>
        /// Obtenir i llistar tots els alumnes de la BD Biblioteca
        /// </summary>
        public static List<Llibre> llistarLlibres()
        {
            List<Llibre> llibres = new List<Llibre>();

            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("SELECT * FROM Llibre", con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                //Console.WriteLine(r["numMatricula"] + ", " + r["nom"] + ", " + r["cognom"]);
                llibres.Add(new Llibre(System.Convert.ToInt32(r[0]), r[1].ToString(), r[2].ToString(), System.Convert.ToInt32(r[3]), r[4].ToString(), r[5].ToString(), System.Convert.ToInt32(r[6])));
                //Console.WriteLine("{0},{1},{2}", r[0], r[1], r[2]);
            }
            con.Close();
            return llibres;
        }

        public static Llibre realitzaConsulta(string consulta)
        {
            Llibre llibre = new Llibre();

            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand(consulta, con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                llibre = new Llibre(System.Convert.ToInt32(r[0]), r[1].ToString(), r[2].ToString(), System.Convert.ToInt32(r[3]), r[4].ToString(), r[5].ToString(), System.Convert.ToInt32(r[6]));
            }
            con.Close();
            return llibre;
        }

        public static Autor realitzaConsultaNomAutor(string consulta)
        {
            Autor autor = new Autor();

            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand(consulta, con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                autor = new Autor(System.Convert.ToInt32(System.Convert.ToInt32(r[0])), r[1].ToString(), r[2].ToString());
            }
            con.Close();
            return autor;
        }

        public static Autor realitzaConsultaAutor(string consulta)
        {
            Autor autor = new Autor();

            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand(consulta, con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                if (r[0] == null)
                    autor = new Autor(1, "", "");
                else
                    autor = new Autor(System.Convert.ToInt32(r[0]), "", "");
            }
            con.Close();
            return autor;
        }

        public static Genere realitzaConsultaGenere(string consulta)
        {
            Genere g = new Genere();

            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand(consulta, con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                if (r[0] == null)
                    g = new Genere(1, "");
                else
                    g = new Genere(System.Convert.ToInt32(r[0]), "");
            }
            con.Close();
            return g;
        }

        public static Autor consultaMaximAutor(string consulta)
        {
            Autor autor = new Autor();
            Autor autor2 = new Autor();

            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand(consulta, con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                autor = new Autor(System.Convert.ToInt32(System.Convert.ToInt32(r[0])), r[1].ToString(), r[2].ToString());
            }

            int id = autor.IdAutor;

            SqlCommand com2 = new SqlCommand("SELECT * FROM Autor WHERE id_autor = " + id, con);
            SqlDataReader r2 = com2.ExecuteReader();
            while (r2.Read())
            {
                autor2 = new Autor(System.Convert.ToInt32(System.Convert.ToInt32(r2[0])), r2[1].ToString(), r2[2].ToString());
            }
            con.Close();

            return autor2;
        }

        public static bool genereDisponible(string nom)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();
            string nomGenere = "";

            SqlCommand com = new SqlCommand("SELECT nom FROM Genere", con);
            SqlDataReader r = com.ExecuteReader();
            while (r.Read())
            {
                nomGenere = r[0].ToString();
                while(nomGenere != nom)
                {
                    if (nomGenere != nom)
                        return false;
                    else
                        return true;
                }
            }

            con.Close();
            return false;
        }

        public static void afegirLlibre(Llibre ll)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("INSERT INTO Llibre (isbn, titol_curt, titol_llarg, id_publicador, resum, premis, pvp) VALUES ('" + ll.Isbn + "','" + ll.TitolCurt + "','" + ll.TitolLlarg + "','" + ll.IdAutor + "','" + ll.Resum + "','" + ll.Premis + "','" + ll.Pvp + "')", con);
            Console.Write("Files inserides " + com.ExecuteNonQuery().ToString());

            con.Close();
        }

        public static void afegirAutor(Autor a)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("INSERT INTO Autor (id_autor, nom, cognoms) VALUES ('" + a.IdAutor + "','" + a.Nom + "','" + a.Cognoms + "')", con);
            Console.Write("Files inserides " + com.ExecuteNonQuery().ToString());

            con.Close();
        }

        public static void afegirGenere(Genere g)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("INSERT INTO Genere (id_genere, nom) VALUES ('" + g.Id_genere + "','" + g.Nom + "')", con);
            Console.Write("Files inserides " + com.ExecuteNonQuery().ToString());

            con.Close();
        }

        public static void afegirLlibreAutor(int isbn, int id_autor)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("INSERT INTO LlibreAutor (isbn, id_autor) VALUES ('" + isbn + "','" + id_autor + "')", con);
            Console.Write("Files inserides " + com.ExecuteNonQuery().ToString());

            con.Close();
        }

        public static void afegirLlibreGenere(int isbn, int id_genere)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("INSERT INTO LlibreGenere (isbn, id_genere) VALUES ('" + isbn + "','" + id_genere + "')", con);
            Console.Write("Files inserides " + com.ExecuteNonQuery().ToString());

            con.Close();
        }

        public static void actualitzarLlibre(Llibre ll)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            string sql = "UPDATE Llibre SET isbn = '" + ll.Isbn + "', titol_curt = '" + ll.TitolCurt + 
                "', titol_llarg = '" + ll.TitolLlarg + "', resum = '" + ll.Resum + "', premis = '" + ll.Premis + 
                "', pvp = '" + ll.Pvp + "' WHERE isbn = " + ll.Isbn;

            SqlCommand com = new SqlCommand(sql, con);
            com.ExecuteNonQuery();

            con.Close();
        }

        public static void eliminarLlibre(int isbn)
        {
            SqlConnection con = obtenirConnexioBiblioteca();
            con.Open();

            SqlCommand com = new SqlCommand("DELETE FROM Llibre WHERE isbn = " + isbn, con);
            com.ExecuteNonQuery();
            con.Close();
        }
    }
}
